/**
 * xaiService.js - X.AI API服务
 * 提供与X.AI API的通信功能
 */

import axios from 'axios';

// API配置
const API_BASE_URL =
    import.meta.env.VITE_APP_API_BASE_URL;
const API_SECRET =
    import.meta.env.VITE_APP_API_SECRET;  //VITE_API_SECRET

/**
 * 创建API实例
 */
const api = axios.create({
    baseURL: API_BASE_URL,
    timeout: 30000,
    withCredentials: true,
    headers: {
        'Content-Type': 'application/json',
        'X-API-Secret': API_SECRET
    }
});

/**
 * 发送消息到X.AI API
 * @param {Array} messages - 消息历史数组
 * @param {string} [model='grok-beta'] - 模型名称
 * @param {number} [temperature=0] - 温度值
 * @returns {Promise} API响应
 */
export const sendMessage = async(messages, model = 'grok-beta', temperature = 0) => {
    try {
        // console.log('\n=== Frontend API Call Start ===');
        console.log('API Base URL:', API_BASE_URL);
        console.log('Request URL:', '/api/chat/xai');

        // 确保messages是数组格式
        const messageArray = Array.isArray(messages) ? messages : [{
            role: 'user',
            content: messages
        }];

        const requestData = {
            messages: messageArray,
            model: 'grok-beta', // 使用X.AI的模型
            // model: 'gpt-3.5-turbo', // 使用X.AI的模型
            temperature,
            stream: false
        };
        // console.log('Request Data:', JSON.stringify(requestData, null, 2));

        console.log('Sending request...');
        const response  = await api.post('/api/chat/xai', requestData);

        console.log('Response Status:', response.status);
        // console.log('Response Headers:', response.headers);
        // console.log('Response Data:', JSON.stringify(response.data, null, 2));
        // console.log('=== Frontend API Call End ===\n');

        return response.data;
    } catch (error) {
        console.error('\n=== Frontend API Error ===');
        console.error('Error Type:', error.constructor.name);
        console.error('Error Message:', error.message);
        
        if (error.response) {
            console.error('Error Status:', error.response.status);
            console.error('Error Headers:', error.response.headers);
            console.error('Error Data:', error.response.data);

            // 根据不同状态码返回不同的错误信息
            let errorMessage;
            switch (error.response.status) {
                case 400:
                    errorMessage = '请求参数错误，请检查输入';
                    break;
                case 401:
                    errorMessage = error.response.data?.error || 
                                 'API密钥未授权或已过期，请更新API密钥';
                    break;
                case 403:
                    errorMessage = error.response.data?.error || 
                                 '访问被拒绝，可能是权限不足或IP被限制';
                    break;
                case 404:
                    errorMessage = '请求的资源不存在';
                    break;
                case 429:
                    errorMessage = '请求过于频繁，请稍后再试';
                    break;
                case 500:
                    errorMessage = error.response.data?.error || 
                                 'X.AI服务器内部错误，请稍后重试';
                    break;
                case 502:
                    errorMessage = '服务器暂时不可用，请稍后重试';
                    break;
                default:
                    errorMessage = `请求失败 (${error.response.status}): ${error.message}`;
            }
            console.log('状态码:', error.response.status||'未知XPI错误');
            throw {
                status: error.response.status,
                message: errorMessage,
                details: error.response.data,
                isApiError: true
            };
        } else {
            // 网络错误或其他错误
            throw {
                status: 'ERROR',
                message: '网络错误或服务不可用，请检查网络连接',
                details: error.message,
                isApiError: true
            };
        }
    }finally {
      
      
        console.log('=== Frontend API Call End ===\n');
    }
};

/**
 * 创建用户消息对象
 * @param {string} content - 用户消息内容
 * @returns {Object} 用户消息象
 */
export const createUserMessage = (content) => ({
    role: 'user',
    content
});

/**
 * 创建助手消息对象
 * @param {string} content - 助手消息内容
 * @returns {Object} 助手消息对象
 */
export const createAssistantMessage = (content) => ({
    role: 'assistant',
    content
});